#ifndef DATABASE_UTIL_H
#define DATABASE_UTIL_H

#include <iostream>
#include <unistd.h>
#include <string>
#include <unordered_map>
#include <vector>
#include "Tools.h"

#include <sqlite3.h>
#include <json/json.h>

class DatabaseUtil
{
private:   
    static DatabaseUtil* singleObjPtr;
    static std::unordered_map<std::string, int> DataTypeMap;

    static bool DataTypeConvert(const Json::Value& data, const std::string& dataName, std::ostringstream& sqlString, bool isFuzzy);//根据表的信息转换数据类型

public: 
    static DatabaseUtil* GetGetInstance();
    static void DeleteInstance();

public:
    void Init();//初始化数据库
    bool AddItem(const std::string& tableName, const Json::Value& data, std::string& message, int& code);//添加数据库条目
    bool EditItem(const std::string& tableName, const Json::Value& data, std::string& message, int& code);//修改数据库条目
    bool DeleteItem(const std::string& tableName, const std::string& guid, std::string& message, int& code);//删除数据库条目
    bool QueryItems(const std::string& tableName, const Json::Value& condition, Json::Value& datas, Json::Value& pageInfo, bool isFuzzy, std::string& message, int& code);//批量查询数据条目

private:
    sqlite3* db;
    bool hasInited;

    DatabaseUtil();
    virtual ~DatabaseUtil();
    void CreateTable();
};

#endif